package cn.pro.CCY;

import java.lang.reflect.Method;

public class chenxiao {
    public static void main(String[] args) throws Exception{
        // randomNumeric:随机生成指定位的数字
        // randomAlphabetic：随机生成指定位数的字母
        //String s = RandomStringUtils.randomAlphabetic(6);
        //System.out.println(s);

        //-------------------------
        //面向对象的思想
        //-------------------------
        //创建User类的实例
        //>>>使用new 关键字调用 User 类的构造器得到实例u
        User u =new User();
        //为实例 u 的name属性赋值为Timor
        u.setName("Timor");
        //u.getName()获取实例 u 的 name 属性的值
        System.out.println(u.getName());

        //为实例 u 的 age 属性赋值为20
        u.setAge("20");
        //u.getAge()获取实例 u 的 age 属性的值
        System.out.println(u.getAge());
        //-------------------------
        //面向对象的思想
        //-------------------------

        //反射
        //类的完整限定名 = 类的包名 + 类名
        //通过类的完整限定名来加载某个类的对象
        //得到的这个UU相当于 User 类
        Class<?> UU =Class.forName("cn.pro.User");
        //通过 UU(类对象) 的newInstance 方法得到 User 类的实例
        //>>>相当于面向对象中的User u =new User();
        Object o = UU.newInstance();

        //通过 UU (类对象)的 getMethod 方法查找指定名称的方法
        Method setName = UU.getMethod("setName", String.class);
        //>>> 通过实例 o 来调用 setName 方法并为 o 的 name 属性赋值
        //>>> 相当于面向对象中的 u.setName("Timor");
        setName.invoke(o,"Jenkins");

        //通过UU(类对象) 的 getMethod 方法查找名称为 getName 的方法
        Method getName = UU.getMethod("getName");
        //>>>使用实例 o 来调用 getName 方法来获取 o 的 name 的属性的
        Object result = getName.invoke(o);
        System.out.println(result);


        Method setAge = UU.getMethod("setAge", String.class);
        setAge.invoke(o,"100");
        Method getAge = UU.getMethod("getAge");
        Object age = getAge.invoke(o);
        System.out.println(age);
    }}